<?php

namespace app\common\lib;

class Str
{
    /**
     * 生成登录所需的token
     * @param $string
     * @return string
     */
    public static function getLoginToken($string){
        //生成token
        $str = md5(uniqid(md5(microtime(true)),true)); //生成一个不会重复的字符串
        $token = sha1($str.$string); //加密
        return $token;
    }

    /**
     * 微信小程序登录使用
     * @param $url
     * @return bool|string
     */
    public static function vget($url){
        $info=curl_init();
        curl_setopt($info,CURLOPT_RETURNTRANSFER,true);
        curl_setopt($info,CURLOPT_HEADER,0);
        curl_setopt($info,CURLOPT_NOBODY,0);
        curl_setopt($info,CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($info,CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($info,CURLOPT_URL,$url);
        $output= curl_exec($info);
        curl_close($info);
        return $output;
    }

    /**
     * 小程序解密
     * @param $encryptedData
     * @param $iv
     * @param $sessionKey
     * @return mixed
     */
    public function wechatDecryptData($encryptedData, $iv, $sessionKey){
        $aesKey=base64_decode($sessionKey);
        $aesIV = base64_decode($iv);
        $aesCipher = base64_decode($encryptedData);
        $result = openssl_decrypt($aesCipher,'AES-128-CBC',$aesKey,1,$aesIV);
        $dataObj = json_decode($result);
        return $dataObj;
    }

    /**
     * 根据地区pid查找地区名称
     * @param $pid
     * @param $regionsData
     * @return mixed|null
     */
    public function getRegionNameByPid($pid,$regionsData)
    {
        // 调用递归函数来查找匹配的 region_name
        $result = $this->findRegionByNameAndPid($regionsData, $pid);
        // 如果找到了匹配的项，返回 region_name，否则返回 null 或其他适当的值
        return $result ? $result['region_name'] : null;
    }

    protected function findRegionByNameAndPid($regions, $pid, $parentKey = 'region_sn')
    {
        foreach ($regions as $region) {
            if ($region[$parentKey] == $pid) {
                return $region; // 如果找到了匹配的 pid，直接返回整个 region 数组
            }
            if (isset($region['children'])) {
                // 递归查找子区域
                $childResult = $this->findRegionByNameAndPid($region['children'], $pid, $parentKey);
                if ($childResult) {
                    return $childResult; // 如果在子区域中找到了匹配的 pid，返回它
                }
            }
        }
        return null; // 如果没有找到匹配的 pid，返回 null
    }
}
